/**
 * 将变量转换成对应的字符串形式
 * @Description 只支持number、string、boolean、null、undefined、Date、object类型的转换
 * @since V1.0.0
 */
export function convertToStr(value: any): string {
    const type = Object.prototype.toString.call(value).slice(8, -1);
    switch (type) {
        case 'String':
        case 'Number':
        case 'Boolean':
        case 'Null':
        case 'Undefined':
        case 'Date':
            return String(value);
        case 'Object':
            return JSON.stringify(value);
        case 'Array':
        case 'Function':
        default:
            console.warn(`convertToStr() => Parameters of Array and Function types are not converted.`);
            return value;
    }
}

/**
 * 比较两个参数转换成字符串后是否相等
 * 将number、null、undefined、object类型的参数值转换为字符串类型
 * @param arg1 参数1
 * @param arg2 参数2
 * @return true/false
 * @since V1.0.0
 */
export function strIsEqual(arg1: any, arg2: any): boolean {
    arg1 = convertToStr(arg1);
    arg2 = convertToStr(arg2);
    return arg1 === arg2;
}

/**
 * 判断字符串是否为空串
 * @param value 要校验的字符串
 * @return boolean true/false
 * @since V1.1.0
 */
export function strIsEmpty(value: string): boolean {
    return value == null || value.length === 0;
}

/**
 * 检验字符串是否为 null、空串或者空格等
 * @param value 要校验的字符传
 * @return boolean true/false
 * @since V1.1.0
 */
export function strIsBlank(value: string): boolean {
    return value == null || value.trim().length === 0;
}

/** 字符串相关方法 */
export class StringUtils {

    /** 将变量转换成对应的字符串形式*/
    static convertToStr(arg: any): string {
        return convertToStr(arg);
    }

    /** 比较两个值是否相等 */
    static strIsEqual(arg1: any, arg2: any): boolean {
        return strIsEqual(arg1, arg2);
    }

    /** 判断字符串是否为空串 */
    static strIsEmpty(value: string): boolean {
        return strIsEmpty(value);
    }

    /** 校验字符串是否为null、空串、空格等 */
    static strIsBlank(value: string): boolean {
        return strIsBlank(value);
    }
}
